home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / source / snip9503 / strsort.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-03-14  |  1.3 KB  |  48 lines

  1. /*
  2. **  strsort() -- Shell sort an array of string pointers via strcmp()
  3. **  Written in ANSI C and optimized for size under Borland TC and BC++.
  4. **
  5. **  Public domain by Raymond Gardner 12/05/91   :-)
  6. **  based on a public domain version by Thad Smith 12/05/91,
  7. **  based on a public domain version by
  8. **  Ray Gardner   Denver, CO   12/88
  9. */
  10.  
  11. #include <string.h>
  12.  
  13. void strsort(char **v, unsigned n)
  14. {
  15.       register unsigned int gap;
  16.       unsigned int i, j;
  17.       register char **a;
  18.       char **b;
  19.  
  20.       gap = 0;
  21.       do
  22.       {
  23.             gap <<= 1;
  24.       } while (++gap < n);
  25.  
  26.       while ((i = (gap >>= 1)) != 0)
  27.       {
  28.             for ( ; (j = i) < n; i++)
  29.             {
  30.                   a = v + j;
  31.                   do
  32.                   {
  33.                         j -= gap;
  34.                         b = a;
  35.                         a -= gap;
  36.                         if (strcmp(*a, *b) > 0)
  37.                         {
  38.                               register char *tmp;
  39.                               tmp = *a;
  40.                               *a = *b;
  41.                               *b = tmp;
  42.                         }
  43.                         else  break;      /* better have this break! */
  44.                   } while (j >=  gap);
  45.             }
  46.       }
  47. }
  48.